#pragma once

#include <string>
#include <vector>
#include <fstream>
#include <muduo/base/Logging.h>


class FileUtil
{
private:
    std::string _filePath;
    std::ifstream _file;
public:
    FileUtil(const std::string &filePath):
    _filePath(filePath),
    _file(filePath,std::ios::binary) // 二进制模式打开文件
    {}
    ~FileUtil();
    // 判断文件路径是否有效
    bool isValid()
    {
        return _file.is_open();
    }
    // 重置打开默认文件
    void resetDefault()
    {
        // 重置文件指针到文件开头
        _file.close();
        _file.open(_filePath, std::ios::binary);
    }

    uint64_t size()
    {
        // 获取文件大小
        _file.seekg(0, std::ios::end);// 移动文件指针到文件末尾
        uint64_t size = _file.tellg();// 获取文件指针位置 即文件大小
        _file.seekg(0, std::ios::beg);// 重置文件指针到文件开头
        return size;
    }

    void ReadFile(std::vector<char> &buffer)
    {
        // 读取文件内容
        if(_file.read(buffer.data(),size()))
        {
            LOG_INFO << "File content load into memory (" << size() << " bytes)";
        }
        else
        {
            LOG_ERROR << "File read error";
        }
    }
};

FileUtil::~FileUtil()
{
    if (_file.is_open())
    {
        _file.close();
    }
}
